#include "vtor_infrared.h"

#ifdef __VTOR_INFRARED__

// 当前接收字节，总下降沿个数，超时时间
uint8_t VtorInfrared_rxByte = 0;
uint8_t VtorInfrared_fallIrqCnt = 0;
uint8_t VtorInfrared_rxTimeout = 0;

// 持续时间
//int16_t VtorInfrared_pulseTimeArray[40] = {0};

void VtorInfrared_ExtiIrqHandler(void)
{
	if (0 == VtorInfrared_ReadPin())
	{
		int32_t pulseTime = VtorInfrared_GetIntervalTime(); // 获取间隔时间
		VtorInfrared_rxTimeout = 200;
		
		if(pulseTime > VtorInfrared_Bit0Time - VtorInfrared_AroundTime
			&& pulseTime < VtorInfrared_Bit0Time + VtorInfrared_AroundTime)
		{
			VtorInfrared_rxByte <<= 1; // bit0
		}
		else if(pulseTime > VtorInfrared_Bit1Time - VtorInfrared_AroundTime
			&& pulseTime < VtorInfrared_Bit1Time + VtorInfrared_AroundTime)
		{
			VtorInfrared_rxByte <<= 1; // bit1
			VtorInfrared_rxByte |= 1;
		}
		else if(2000 < pulseTime && pulseTime < 2600)
		{
			// 重复码
		}
		else if(pulseTime > VtorInfrared_BootTime - VtorInfrared_AroundTime
			&& pulseTime < VtorInfrared_BootTime + VtorInfrared_AroundTime)
		{
			//引导码
			VtorInfrared_StartTimer();
			VtorInfrared_rxByte = 0;
			VtorInfrared_fallIrqCnt = 0;
		}
		else
		{
			// 异常数据，提前结束接收
			VtorInfrared_rxByte = 0;
			VtorInfrared_fallIrqCnt = 0;
		}
		
		if (VtorInfrared_fallIrqCnt > 2
			&& (VtorInfrared_fallIrqCnt & 0x07) == 0)
		{
			// 每 8 个bit组成1个字节，触发回调
			VtorInfrared_RecvByteCallback(VtorInfrared_rxByte);
		}
		
		//VtorInfrared_pulseTimeArray[VtorInfrared_fallIrqCnt % 40] = pulseTime;
		VtorInfrared_fallIrqCnt++;
	}
}




#endif // __VTOR_INFRARED__

